package com.woniuxy.java102vuecli.service.impl;

import com.woniuxy.java102vuecli.entity.Node;
import com.woniuxy.java102vuecli.mapper.NodeMapper;
import com.woniuxy.java102vuecli.service.NodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author author
 * @Create 2023-10-11 10:57
 */
@Service
public class NodeServiceImpl implements NodeService {

    @Autowired
    NodeMapper nodeMapper;

    @Override
    public List<Node> getAllNodes() {
        List<Node> allNodes = nodeMapper.selectAllNodes();
        return allNodes
                .stream()
                //筛选根节点
                .filter(root->root.getPnid().equals(0))
                //给根节点添加子节点
                .map(root->{
                    addChilidren(root,allNodes);
                    return root;
                })
                .collect(Collectors.toList());
    }

    @Override
    public List<Node> getAllNodes2() {
        return nodeMapper.selectAllNodes2();
    }

    private void addChilidren(Node root, List<Node> allNodes) {
        allNodes
                .stream()
                .filter(node->node.getPnid().equals(root.getNid()))
                .map(node->{
                    root.getChildren().add(node);
                    addChilidren(node, allNodes);
                    return node;
                })
                .collect(Collectors.toList());
    }

//    @Override
//    public List<Node> getAllNodes() {
//        List<Node> allNodes = nodeMapper.selectAllNodes();
//        List<Node> nodes=new ArrayList<>();
//        for(Node root : allNodes){
//            if(root.getPnid().equals(0)){
//                //添加根节点
//                nodes.add(root);
//                //根节点添加直接点
//                addChilidren(root,allNodes);
//            }
//        }
//        return nodes;
//    }
//
//    private void addChilidren(Node root, List<Node> allNodes) {
//        for(Node subnode : allNodes){
//            if(subnode.getPnid().equals(root.getNid())){
//                root.getChildren().add(subnode);
//                //子节点还有子节点，递归添加
//                addChilidren(subnode,allNodes);
//            }
//        }
//    }
}
